package com.centerm.structure.service;

import java.util.List;

import com.centerm.common.view.page.PageQueryResult;
import com.centerm.structure.domain.Permission;
import com.centerm.structure.dto.PermissionInfo;
import com.centerm.structure.dto.PermissionTreeInfo;

/**
 * Permission 权限Service层接口
 * 
 * @author czy
 *
 */
public interface PermissionService {
	
    /**
     * @Description 查询分页记录列表
     * @author czy
     * @date 2017年8月8日
     * @param pageNum:页数，pageSize:每页记录数
     * @return PageQueryResult<PermissionInfo>
     */
    PageQueryResult<PermissionInfo> pagePermissionInfoList(Integer pageNum, Integer pageSize,PermissionInfo permissionInfo);
    
    /**
     * @Description 新增记录信息
     * @author czy
     * @date 2017年8月8日
     * @param 记录id
     * @return 
     */
    Integer insert(PermissionInfo permissionInfo);
    
    /**
     * @Description 修改记录信息
     * @author czy
     * @date 2017年8月8日
     * @param PermissionInfo
     * @return 更新记录数
     */
    Integer update(PermissionInfo permissionInfo);
    
    /**
     * @Description 删除记录信息
     * @author czy
     * @date 2017年8月8日
     * @param 记录id
     * @return 删除记录数
     */
    Integer delete(Integer id);
    
	/**
	 * 根据id获取权限详细信息
	 * 
	 * @return
	 */
    PermissionInfo getById(Integer id);
    
    /**
	 * @Description: 
	 *   获得所有子层权限---树结构形式
	 * @author czy
	 * @date 2017年8月15日
	 * @param parentId:父节点id，0为顶层根节点
	 * @return 
	 */
	List<PermissionTreeInfo> loadPermissionTree(Integer parentId);
	
    /**
	 * @Description: 
	 *   获得当前父节点的下层权限
	 * @author czy
	 * @date 2017年8月15日
	 * @param parentId:父节点id，0为顶层根节点
	 * @return 
	 */
	List<PermissionTreeInfo> loadCurrentPermissionTree(Integer parentId);
	
    /**
     * @Description 根据条件查询记录列表
     * @author czy
     * @date 2017年8月8日
     * @param permissionInfo
     * @return List<UserInfo>
     */
    List<Permission> listByParam(PermissionInfo permissionInfo);
	
	/**
	 * @Description: 
	 *   根据父节点id获得所有权限
	 * @author czy
	 * @date 2017年8月15日
	 * @param parentId:父节点id，0为顶层根节点
	 * @return 
	 */
	List<Permission> listPermissionByParentId(Integer parentId);
	
	/**
	 * @Description: 
	 *   判断childId是否包含在parentId的所有子层中
	 * @author czy
	 * @date 2017年8月15日
	 * @param parentId:父节点id，0为顶层根节点；childId:孩子节点
	 * @return 
	 */
	Boolean isChild(Integer parentId,Integer childId);
	
	/**
     * @Description: 获取用户所有权限
     * @author czy
     * @date 2017年8月17日
     * @param List<Permission>
     * @return 用户id
      */
    List<Permission> listUserPermsssion(Integer userId);
    
    /**
     * @Description: 获取用户所有权限code
     * @author czy
     * @date 2017年8月17日
     * @param List<String>
     * @return 用户id
      */
    List<String> listUserPermsssionCode(Integer userId);

    /**
     * 验证权限编码是否存在
     * @author czy
	 * @date 2017年8月14日
     * @param code:权限编码
     * @return 
     */
	Boolean existCode(String code);
}
